#include "at32f403a_407_clock.h"
#include "chip_sys.h"
#include "chip_gpio.h"
#include "bsp_uart.h"
#include "ztask.h"
#include "dev_ssd1306_spi.h"
#include "wa_gui.h"
#include "wa_tick.h"
#include "wa_malloc.h"
#include "zlog.h"
#include "wa_ssd1306_spi_drv.h"
#include "wa_keys_drv.h"
#include "wap.h"


void led_task(void);
void oled_task(void);
void wagui_task(void);
void wagui_tick_task(void);
void wagui_mem_task(void);

int wagui_mem_used;

ztask_t task_map[] = 
{
//	{0, 1000, led_task},
//	{0, 1000, oled_task},
	{0, 50, wagui_task},
	{0, 10, wagui_input_task},
	{0, 10, wagui_tick_task},
	{0, 100, wagui_mem_task},
};

uint8_t task_size = sizeof(task_map) / sizeof(ztask_t);

void led_task(void)
{
	chip_gpio_pin_toggle(CHIP_GPIOD, CHIP_GPIO_PIN13);
	chip_gpio_pin_toggle(CHIP_GPIOD, CHIP_GPIO_PIN14);
	chip_gpio_pin_toggle(CHIP_GPIOD, CHIP_GPIO_PIN15);
}

void oled_task(void)
{
	static uint8_t color;
	uint32_t stick, etick;
	color = !color;
	stick = chip_get_tick();
	dev_ssd1306_spi_fill(0, 0, 128, 64, color);
	dev_ssd1306_spi_update(0, 0, 128, 64);
	etick = chip_get_tick();
	zprintf("refresh screen need: %d ms\r\n", etick - stick);
}

void wagui_mem_task(void)
{
	wagui_mem_used = wa_mem_perused();
}

int main(void)
{
  chip_sys_init();
	chip_delay_tick_init();
	
	zlog_init();
	
	chip_gpio_init(CHIP_GPIOA, CHIP_GPIO_PIN8, CHIP_GPIO_OUTPUT);
	chip_gpio_pin_set(CHIP_GPIOA, CHIP_GPIO_PIN8, CHIP_GPIO_LOW);
	
	dev_ssd1306_spi_init();
	
	wap_init();
  while(1)
  {
		ztask_loop(task_map, task_size, 1);
  }
}
